<article>
    <h1><?php echo $GLOBALS['title'] ?></h1>
    <p>我们常用的操作数据库语言SQL语句在执行的时候需要要先编译，然后执行，而存储过程（Stored Procedure）是一组为了完成特定功能的SQL语句集，经编译后存储在数据库中，用户通过指定存储过程的名字并给定参数（如果该存储过程带有参数）来调用执行它。</p>
    <h3>声明变量</h3>
    <pre><code><?php echo htmlspecialchars('
mysql>SET @name="学并思";
mysql>select @name;') ?></code></pre>
    <h3>查看存储过程</h3>
    <pre><code><?php echo htmlspecialchars('
mysql>SHOW PROCEDURE STATUS\G') ?></code></pre>
	<h3>调用存储过程</h3>
	<pre><code><?php echo htmlspecialchars('
mysql>call 存储过程名();') ?></code></pre>
	<h3>删除存储过程</h3>
	<pre><code><?php echo htmlspecialchars('
mysql>DROP PROCEDURE 存储过程名;') ?></code></pre>
	<h3>存储过程的创建</h3>
	<h4>语法</h4>
	<pre><code><?php echo htmlspecialchars('
CREATE PROCEDURE 过程名 ([过程参数[,...]])
[特性 ...] 过程体') ?></code></pre>
	<h3>实例</h3>
	<pre><code><?php echo htmlspecialchars('
mysql> DELIMITER //  
mysql> CREATE PROCEDURE getcountstu(OUT s int)  
    -> BEGIN 
    -> SELECT COUNT(id) INTO s FROM stu;  
    -> END 
    -> //  
mysql> DELIMITER ; 
mysql>call getcountstu(@s);
mysql>select @s;') ?></code></pre>
	<h4>例子解析：</h4>
	<ul>
		<li>这里需要注意的是DELIMITER //和DELIMITER ;两句，DELIMITER是分割符的意思，因为MySQL默认以";"为分隔符，如果我们没有声明分割符，那么编译器会把存储过程当成SQL语句进行处理，则存储过程的编译过程会报错，所以要事先用DELIMITER关键字申明当前段分隔符，这样MySQL才会将";"当做存储过程中的代码，不会执行这些代码，用完了之后要把分隔符还原。</li><p></p>
		<li>存储过程根据需要可能会有输入、输出、输入输出参数，这里有一个输出参数s，类型是int型，如果有多个参数用","分割开。</li><p></p>
		<li>过程体的开始与结束使用BEGIN与END进行标识。</li>
	</ul>

	<p>上面资料摘录于互联网</p>
	<h3>存储过程的参数</h3>
	<p>MySQL存储过程的参数用在存储过程的定义，共有三种参数类型,IN,OUT,INOUT,形式如：CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...])</p>
	<ul>
		<li>IN 输入参数:表示该参数的值必须在调用存储过程时指定，在存储过程中修改该参数的值不能被返回，为默认值</li><p></p>
		<li>OUT 输出参数:该值可在存储过程内部被改变，并可返回</li><p></p>
		<li>INOUT 输入输出参数:调用时指定，并且可被改变和返回</li>
	</ul>
	<h4>IN参数例子</h4>
	<pre><code><?php echo htmlspecialchars('
mysql > DELIMITER //  
mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int)  
-> BEGIN   
-> SELECT p_in;   
-> SET p_in=2;   
-> SELECT p_in;   
-> END;   
-> //  
mysql > DELIMITER ;
mysql > SET @p_in=1;  
mysql > CALL demo_in_parameter(@p_in);') ?></code></pre>
	<h4>OUT参数例子</h4>
	<pre><code><?php echo htmlspecialchars('
mysql > DELIMITER //  
mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int)  
-> BEGIN 
-> SELECT p_out;  
-> SET p_out=2;  
-> SELECT p_out;  
-> END;  
-> //  
mysql > DELIMITER ; 
mysql > SET @p_out=1;  
mysql > CALL sp_demo_out_parameter(@p_out);') ?></code></pre>
	<h4>INOUT参数例子</h4>
	<pre><code><?php echo htmlspecialchars('
mysql > DELIMITER //   
mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int)   
-> BEGIN 
-> SELECT p_inout;  
-> SET p_inout=2;  
-> SELECT p_inout;   
-> END;  
-> //   
mysql > DELIMITER ;  
mysql > SET @p_inout=1;  
mysql > CALL demo_inout_parameter(@p_inout) ; ') ?></code></pre>
<p>资料摘录于互联网。</p>
</article>
	